﻿using System.Collections.Generic;
using Microsoft.Xna.Framework;
using PoolGame2.Controls;
using PoolGame2.Physics;
using PoolGame2.Player;

namespace PoolGame2.Managers
{
    public abstract class ManagerGame : GameComponent, IGameControlListener
    {

        public static PhysicsRuntime physicsRuntime;

        public enum GameState
        {
            GAME_INVALID = 0,
            GAME_LOBBY,
            GAME_STARTING,
            GAME_PLAYER_TAKING_SHOT,
            GAME_BALLS_ACTIVE,
            GAME_REPLAY_MODE,
            GAME_MOVE_BALLS,
            GAME_PAUSED,
            GAME_OVER,
        };

        public ManagerGame(PoolGame game) : base(game) { }
        public abstract GameState GetState();
        public abstract void StartGame();
        public abstract void EndGame();
        public abstract void Draw(GameTime gameTime);
        public abstract CameraManager GetCameraManager();
        public abstract PlayerPresence GetPlayerPresence();
        public abstract PlayerPresence GetPlayerPresence(int i);
        public abstract PhysicsRuntime GetPhysicsRuntime();
        public abstract int GetPlayerNumber();
        public abstract bool GetBreak();
        public abstract void SetBreak(bool val);

        public virtual void GameControlPerformed(List<GameControlAction> actions)
        {
        }
    }
}
